home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / interp / perl-5.003.tar.gz / perl-5.003.tar / perl-5.003 / gv.h < prev    next >
C/C++ Source or Header  |  1996-02-23  |  4KB  |  129 lines

  1. /*    gv.h
  2.  *
  3.  *    Copyright (c) 1991-1994, Larry Wall
  4.  *
  5.  *    You may distribute under the terms of either the GNU General Public
  6.  *    License or the Artistic License, as specified in the README file.
  7.  *
  8.  */
  9.  
  10. struct gp {
  11.     SV *    gp_sv;        /* scalar value */
  12.     U32        gp_refcnt;    /* how many globs point to this? */
  13.     struct io *    gp_io;        /* filehandle value */
  14.     CV *    gp_form;    /* format value */
  15.     AV *    gp_av;        /* array value */
  16.     HV *    gp_hv;        /* associative array value */
  17.     GV *    gp_egv;        /* effective gv, if *glob */
  18.     CV *    gp_cv;        /* subroutine value */
  19.     U32        gp_cvgen;    /* generational validity of cached gv_cv */
  20.     I32        gp_lastexpr;    /* used by nothing_in_common() */
  21.     line_t    gp_line;    /* line first declared at (for -w) */
  22.     GV *    gp_filegv;    /* file first declared in (for -w) */
  23. };
  24.  
  25. #if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
  26. #define MICROPORT
  27. #endif
  28.  
  29. #define GvXPVGV(gv)    ((XPVGV*)SvANY(gv))
  30.  
  31. #define GvGP(gv)    (GvXPVGV(gv)->xgv_gp)
  32. #define GvNAME(gv)    (GvXPVGV(gv)->xgv_name)
  33. #define GvNAMELEN(gv)    (GvXPVGV(gv)->xgv_namelen)
  34. #define GvSTASH(gv)    (GvXPVGV(gv)->xgv_stash)
  35. #define GvFLAGS(gv)    (GvXPVGV(gv)->xgv_flags)
  36.  
  37. #define GvSV(gv)    (GvGP(gv)->gp_sv)
  38. #define GvREFCNT(gv)    (GvGP(gv)->gp_refcnt)
  39. #define GvIO(gv)    ((gv) && SvTYPE((SV*)gv) == SVt_PVGV ? GvIOp(gv) : 0)
  40. #define GvIOp(gv)    (GvGP(gv)->gp_io)
  41. #define GvIOn(gv)    (GvIO(gv) ? GvIOp(gv) : GvIOp(gv_IOadd(gv)))
  42.  
  43. #define GvFORM(gv)    (GvGP(gv)->gp_form)
  44. #define GvAV(gv)    (GvGP(gv)->gp_av)
  45.  
  46. #ifdef    MICROPORT    /* Microport 2.4 hack */
  47. AV *GvAVn();
  48. #else
  49. #define GvAVn(gv)    (GvGP(gv)->gp_av ? \
  50.              GvGP(gv)->gp_av : \
  51.              GvGP(gv_AVadd(gv))->gp_av)
  52. #endif
  53. #define GvHV(gv)    ((GvGP(gv))->gp_hv)
  54.  
  55. #ifdef    MICROPORT    /* Microport 2.4 hack */
  56. HV *GvHVn();
  57. #else
  58. #define GvHVn(gv)    (GvGP(gv)->gp_hv ? \
  59.              GvGP(gv)->gp_hv : \
  60.              GvGP(gv_HVadd(gv))->gp_hv)
  61. #endif            /* Microport 2.4 hack */
  62.  
  63. #define GvCV(gv)    (GvGP(gv)->gp_cv)
  64. #define GvCVGEN(gv)    (GvGP(gv)->gp_cvgen)
  65.  
  66. #define GvLASTEXPR(gv)    (GvGP(gv)->gp_lastexpr)
  67.  
  68. #define GvLINE(gv)    (GvGP(gv)->gp_line)
  69. #define GvFILEGV(gv)    (GvGP(gv)->gp_filegv)
  70.  
  71. #define GvEGV(gv)    (GvGP(gv)->gp_egv)
  72. #define GvENAME(gv)    GvNAME(GvEGV(gv) ? GvEGV(gv) : gv)
  73. #define GvESTASH(gv)    GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv)
  74.  
  75. #define GVf_INTRO    0x01
  76. #define GVf_MULTI    0x02
  77. #define GVf_ASSUMECV    0x04
  78. #define GVf_IMPORTED    0xF0
  79. #define GVf_IMPORTED_SV      0x10
  80. #define GVf_IMPORTED_AV      0x20
  81. #define GVf_IMPORTED_HV      0x40
  82. #define GVf_IMPORTED_CV      0x80
  83.  
  84. #define GvINTRO(gv)        (GvFLAGS(gv) & GVf_INTRO)
  85. #define GvINTRO_on(gv)        (GvFLAGS(gv) |= GVf_INTRO)
  86. #define GvINTRO_off(gv)        (GvFLAGS(gv) &= ~GVf_INTRO)
  87.  
  88. #define GvMULTI(gv)        (GvFLAGS(gv) & GVf_MULTI)
  89. #define GvMULTI_on(gv)        (GvFLAGS(gv) |= GVf_MULTI)
  90. #define GvMULTI_off(gv)        (GvFLAGS(gv) &= ~GVf_MULTI)
  91.  
  92. #define GvASSUMECV(gv)        (GvFLAGS(gv) & GVf_ASSUMECV)
  93. #define GvASSUMECV_on(gv)    (GvFLAGS(gv) |= GVf_ASSUMECV)
  94. #define GvASSUMECV_off(gv)    (GvFLAGS(gv) &= ~GVf_ASSUMECV)
  95.  
  96. #define GvIMPORTED(gv)        (GvFLAGS(gv) & GVf_IMPORTED)
  97. #define GvIMPORTED_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED)
  98. #define GvIMPORTED_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED)
  99.  
  100. #define GvIMPORTED_SV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_SV)
  101. #define GvIMPORTED_SV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_SV)
  102. #define GvIMPORTED_SV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_SV)
  103.  
  104. #define GvIMPORTED_AV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_AV)
  105. #define GvIMPORTED_AV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_AV)
  106. #define GvIMPORTED_AV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_AV)
  107.  
  108. #define GvIMPORTED_HV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_HV)
  109. #define GvIMPORTED_HV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_HV)
  110. #define GvIMPORTED_HV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_HV)
  111.  
  112. #define GvIMPORTED_CV(gv)    (GvFLAGS(gv) & GVf_IMPORTED_CV)
  113. #define GvIMPORTED_CV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_CV)
  114. #define GvIMPORTED_CV_off(gv)    (GvFLAGS(gv) &= ~GVf_IMPORTED_CV)
  115.  
  116. #define Nullgv Null(GV*)
  117.  
  118. #define DM_UID   0x003
  119. #define DM_RUID   0x001
  120. #define DM_EUID   0x002
  121. #define DM_GID   0x030
  122. #define DM_RGID   0x010
  123. #define DM_EGID   0x020
  124. #define DM_DELAY 0x100
  125.  
  126. #define GV_ADD        0x01
  127. #define GV_ADDMULTI    0x02
  128. #define GV_ADDWARN    0x04
  129.